# -*- coding: UTF-8 -*-

import random
import Systeme
import entite
import math
from datetime import datetime

class Galaxie :
    def __init__ (self, SEED,listeJoueur, worldSize):
        tstart = datetime.now()
        
        self.listeJoueur=listeJoueur
        
        self.listeRessources=[]
        self.listeEntites=[]
        self.listeSystemes=[]
        self.listeTrouDeVerre=[]
        self.listeNom=[]
        
        self.worldSize = worldSize

        self.seed = SEED
        random.seed(self.seed)
        
        self.genererListeNoms()
        self.genererSystemesV2(25)
        #for systeme in self.listeSystemes:
        #    for planete in systeme.listePlanetes:
        #        planete.genererEmplacementDepart(self.listeJoueur)

        self.genererEmplacementDepart()
        
        tend = datetime.now()
        print(tend-tstart)
        print("génération terminée")
######################################
#######
#######  MÉTHODE DE GÉNÉRATION
#######
######################################

    def genererListeNoms(self):
        self.list1=["La","Le","Lo","Li","Lu","Ly",  "Da","De","Do","Di","Du","Dy",  "Ma","Me","Mo","Mi","Mu","My" ,"Pen"]
        self.list2=["lon","ton","son","don","mon", "lan","tan","san","dan","man" ,"lor","tor","sor","dor","mor", "is", "tra", "tri","tru","tro","tre"]
        self.list3=["myr","tyr","syr","dyr","lyr" ,"da","de","do","di","du","dy","ba","be","by","bo","bu" ,"noune"]
        for x in range(self.list1.__len__()-1):
            for y in range(self.list2.__len__()-1):
                self.listeNom.append(self.list1[x]+self.list2[y])
        for x in range(self.list1.__len__()-1):
            for y in range(self.list2.__len__()-1):
                for z in range(self.list3.__len__()-1):
                    self.listeNom.append(self.list1[x]+self.list2[y]+self.list3[z])
        print(len(self.listeNom))

		
    def genererSystemesV2(self,nombreSysteme):
        zone = int(self.worldSize/ math.sqrt(nombreSysteme))
        #print(int(math.sqrt(nombreSysteme)))
        IDSysteme=0
        
        for x in range(int(math.sqrt(nombreSysteme))):
            for y in range(int(math.sqrt(nombreSysteme))):
                nomSysteme=self.listeNom.pop(random.randint(1,self.listeNom.__len__()-1))
                self.listeSystemes.append( (Systeme.Systeme(self, IDSysteme, self.seed+IDSysteme, nomSysteme, random.randint(5,zone-5)+x*zone, random.randint(5,zone-5)+y*zone, self.worldSize) ))
                IDSysteme=IDSysteme+1
                
    def collecterRessourcesSurChaquePlanete(self,frame,joueur):
        if frame%20==0: 
            for systeme in self.listeSystemes:
                for planete in systeme.listePlanetes:
                    planete.collecterRessources(joueur)
    
    
    def genererEmplacementDepart(self):
        #Pour chaque joueur, choisis un systeme solaire de départ selon un un Cadran de la galaxie
        # Joueur 1: en haut a gauche
        # Joueut 2: en bas a droite ... etc
        

        for n in range(len(self.listeJoueur)):
            #zone = (n % 3 * self.worldSize / 3, Math.floor(n / 3) * self.worldSize / 3)
            if n==0: ## haut gauche
                for i in range(len(self.listeSystemes)):
                    #if self.listeSystemes[i].posX<zone[0] and self.listeSystemes[i].posY<zone[1]:
                    self.listeSystemes[i].trouverPlaneteDepart(self.listeJoueur[n])
                    break
            if n==1: ## bas droite
                for i in range(len(self.listeSystemes)):
                    #if self.listeSystemes[i].posX>zone*2 and self.listeSystemes[i].posZ>zone*2:
                    self.listeSystemes[i].trouverPlaneteDepart(self.listeJoueur[n])
                    break
            if n==2: ## 
                for i in range(len(self.listeSystemes)):
                    #if self.listeSystemes[i].posX>zone*2 and self.listeSystemes[i].posZ<zone:
                    self.listeSystemes[i].trouverPlaneteDepart(self.listeJoueur[n])
                    break
            if n==3:
                for i in range(len(self.listeSystemes)):
                    #if self.listeSystemes[i].posX<zone and self.listeSystemes[i].posZ>zone*2:
                    self.listeSystemes[i].trouverPlaneteDepart(self.listeJoueur[n])
                    break
            if n==4:  # haut milieu
                for i in range(len(self.listeSystemes)):
                    #if self.listeSystemes[i].posX>zone and self.listeSystemes[i].posX<zone*2 and self.listeSystemes[i].posZ<zone:
                    self.listeSystemes[i].trouverPlaneteDepart(self.listeJoueur[n])
                    break
            if n==5: # bas milieu
                for i in range(len(self.listeSystemes)):
                    #if self.listeSystemes[i].posX<zone and self.listeSystemes[i].posX<zone*2 and self.listeSystemes[i].posZ>zone*2:
                    self.listeSystemes[i].trouverPlaneteDepart(self.listeJoueur[n])
                    break
            if n==6: # droite milieu
                for i in range(len(self.listeSystemes)):
                    #if self.listeSystemes[i].posX>zone*2 and self.listeSystemes[i].posZ>zone and self.listeSystemes[i].posZ<zone*2:
                    self.listeSystemes[i].trouverPlaneteDepart(self.listeJoueur[n])
                    break
            if n==7: # gauche milieu
                for i in range(len(self.listeSystemes)):
                    #if self.listeSystemes[i].posX<zone and self.listeSystemes[i].posZ>zone and self.listeSystemes[i].posZ<zone*2:
                    self.listeSystemes[i].trouverPlaneteDepart(self.listeJoueur[n])
                    break
            
        
    
    def genererTrouDeVerre(self, nombreTrouDeVerre): # pas complet
        for nb in range(nombreTrouDeVerre):
            TrouDeVerreEnPlace = False

            while not TrouDeVerreEnPlace:
                posX=random.randint(1,self.worldSize)
                posY=random.randint(1,self.worldSize)
                if len(self.listeTrouDeVerre) == 0:
                    self.listeTrouDeVerre.append([posX,posY])
                else:
                    for i in range(len(self.listeTrouDeVerre)):
                        if posX > self.listeTrouDeVerre[i][0].posX-10 and posX < self.listeTrouDeVerre[i][0].posX+10 and posY >self.listeTrouDeVerre[i][1].posY-5 and posY <self.listeTrouDeVerre[i][1].posY+5:
                            TrouDeVerreEnPlace=False
                            #print("false")
                            break 
                        else:
                            TrouDeVerreEnPlace=True
                            #print("true")
                            
                    if TrouDeVerreEnPlace==True:
                        self.listeTrouDeVerre.append([posX,posY])
    
######################################
#######
#######  MÉTHODE D'ACCÈS
#######
######################################
    def typeVue(self):
        return "Galaxie"

    def systemeSelectionnee(self, posX, posY):
        for i in range(len(self.listeSystemes)):
            if self.listeSystemes[i].posX==posX and self.listeSystemes[i].posY==posY:
                return self.listeSystemes[i]
        
    def estVueSystemePossible(self,systeme,nomJoueur):
        for i in range(len(systeme.listeEntites)):
            if systeme.listeEntites[i].joueur.nom == nomJoueur:
                return True
        return False
            
    def trouverSystemeParID(self,ID):
        for systeme in self.listeSystemes:
            if systeme.ID == ID:
                return systeme
              
class test :
    def __init__(self):

        galaxie = Galaxie(999,2)
        for i in range(len(galaxie.listeSystemes)):
            print(galaxie.listeSystemes[i].nom)
            print(str(galaxie.listeSystemes[i].posX)  + " " + str(galaxie.listeSystemes[i].posY))
        n=input()
        
if __name__ == '__main__':
    test = test()
    print("Fin")
